//file per la cancellazione di un documento su s3 e delle relative tabelle su dynamo db con e senza redis

exports.cancella = function (db, s3, titolo, options, callback) {
    //cancello su s3
    s3.deleteObject({ 
        Bucket: options.db.amazon_s3_snapshots_bucket_name,
        Key: titolo+"/"+titolo+".zip"
    }, function(err, data) {
        if (err != null) {
            console.log("Error deleting file in s3");
            console.log(err);
        }
        else {
            console.log("File "+titolo+"/"+titolo+".zip cancellato");
            //cancello la tabella ops
            db.deleteTable ({
                TableName: options.db.amazon_dynamo_operations_table_name+"_"+titolo
            }, function(err, data) { 
                if (err != null) {
                    console.log("Error deleting Dynamo ops_"+titolo+" table");
                    console.log(err);
                }
                else {
                    console.log("Tabella "+options.db.amazon_dynamo_operations_table_name+"_"+titolo+" cancellata");
                    //cancello la tabella snapshot
                    db.deleteTable({
                        TableName: options.db.amazon_dynamo_snapshots_table_name+"_"+titolo
                    }, function(err, data){
                        if (err != null) {
                            console.log("Error deleting Dynamo snapshots_"+titolo+" table");
                            console.log(err);
                        }
                        else {
                            console.log("Tabella "+options.db.amazon_dynamo_snapshots_table_name+"_"+titolo+" cancellata");
                            callback(); 
                        }
                    })
                }
            });
        }
    })   
}

exports.cancella_r = function(db, s3, titolo, options, time, callback) {
    db.listTables({}, 
        function(err, data){  
            for (var i=0; i<=data.TableNames.length; i++){
                if (data.TableNames[i] == options.db.amazon_dynamo_operations_table_name+"_"+titolo) {
                    //controllo lo stato
                    db.describeTable({ 
                        TableName: data.TableNames[i]
                        }, 
                        function(err, data){
                            //se la tabella è ACTIVE posso andare
                            if (data.Table.TableStatus == "ACTIVE"){
                                exports.cancella(db, s3, titolo, options, callback);
                            }
                            //se la tabella è CREATING devo aspettare che diventa ACTIVE prima di cancellarla
                            else if (data.Table.TableStatus == "CREATING") {
                                callback('not-now');
                            }
                            //se la tabella è DELETING non devo fare niente hanno gia' fatto il mio lavoro
                            else if (data.Table.TableStatus == "DELETING") {
                                callback();
                            }
                        }
                    );
                    break;
                }
                else if (data.TableNames[i] == undefined) {
                    callback();
                }
            }
        }
    );
/*    function waitTableReady(){
        db.describeTable({ 
            TableName: options.db.amazon_dynamo_operations_table_name+'_'+titolo
            }, function(err, data){
                if (data == null){
                    callback();
                }
                else {
                    if (data.Table.TableStatus == "ACTIVE"){
                        exports.cancella(db, s3, titolo, options, callback);
                    }
                    else if (data.Table.TableStatus == "DELETING"){
                        callback()
                    }
                    else {
                        waitTableReady();
                    }
                }
            }
        );
    };*/
}